package Blog1;

import java.lang.reflect.Field;
import java.util.Arrays;

/**
 * 博客 String 类的认识
 */
public class Blog10 {
    public static void main(String[] args) {
        String str = "hello";
        str = str + "world";
        str += "!!!";

        System.out.println(str);
        for (int i = 0; i < 6; i++) {
            str += "!";
        }

        System.out.println(str);
    }


    public static void func(String str, char[] args) {
        str = "world";
        args[0] = 'A';
    }

    public static void main7(String[] args) {
        String str = "hello";
        char[] val = {'a'};
        System.out.println(str);
        System.out.println(Arrays.toString(val));
        System.out.println("***修改后***");
        func(str,val);
        System.out.println(str);
        System.out.println(Arrays.toString(val));
    }


    public static void main6(String[] args) throws NoSuchFieldException, IllegalAccessException {
        String str = "hello";
        System.out.println(str);
        System.out.println("修改后的结果：");
       // 获取 String 类中的 value 字段. 这个 value 和 String 源码中的 value 是匹配的.
        Field field = String.class.getDeclaredField("value");
        // 将这个字段的访问属性设为 true,从而可以访问了
        field.setAccessible(true);
        // 把 str 中的 value 属性获取到
        char[] value = (char[]) field.get(str);
        // 通过下标，修改 value 的值，就是修改该 str 字符串的对应下标的值
        value[0] = 'H';
        System.out.println(str);
    }


    public static void main5(String[] args) {
        String str3 = new String("hello").intern();  // 手动入池
        String str = "hello";
        System.out.println(str == str3);  // 入字符串常量池了，引用的对象是相同的 ，true
        String str2 = new String("hello");
        System.out.println(str == str2);        // 构造方法，没有入池，所以结果是false


    }



    public static void main4(String[] args) {
        String str = "hello";
        String str2 = str;
        System.out.println("str:"+str);
        System.out.println("str:"+str2);
        System.out.println("*** 修改 ***");
        str2 = "world";
        System.out.println("str:"+str);
        System.out.println("str2:"+str2);
    }



    public static void main3(String[] args) {
        String str = "hello";
        String str2 = "hello";
        String str3 = "hello";

        System.out.println(str == str2);
        System.out.println(str == str3);
        System.out.println(str2 == str3);
    }

    public static void main2(String[] args) {
        String  str = "hello";
        String str2 = str;

        System.out.println(str == str2);
    }

    public static void main1(String[] args) {
      /*  String str = "helloworld";
        System.out.println(str);
        */

       /* String str = new String("helloworld");
        System.out.println(str);*/

        char[] val = {'h','e','l','l','o'};
        String str = new String(val);
        System.out.println(str);

    }
}
